# 并查集模板
class UnionFind:
    def __init__(self, n):
        # 初始化
        self.fa=list(range(n+1)) # 生成序列 fa[i]=i 表示 i的 根节点是 i
        self.size=[1]*(n+1)  # 集合的大小
        self.cnt=n  # 连通块的个数

    # 查找x 的根节点
    # 同时做路径压缩，把 同一个集合里面的节点  共同指向一个 根节点
    def find(self, x):

        if self.fa[x]!=x:
            # 路径压缩 根节点 指向一个根节点
            self.fa[x]=self.find(self.fa[x])
        return self.fa[x]

    # 合并 x，y 为 同一个集合里面
    def merge(self, x, y):
        # 查找各自的根
        xx,yy=self.find(x),self.find(y)
        if xx==yy:  # 已经是同一个 不能做合并
            return False
        self.fa[xx]=yy  # 合并集合   xx集合 合并到yy
        self.size[yy] += self.size[xx] # 更新集合大小
        # 无需更新 size[xx] ，因为 获取集合大小时 使用 size[find(x)] 输出的是 根节点的大小 == 整个集合的大小
        self.cnt-=1  # 成功合并 连通块-1
        return True

    # 判断 x 和 y 是否在同一个集合里面
    def is_same(self, x, y):
        # x 和 y 属于同一个 根节点下的 == 在同一个集合里面
        return self.find(x) == self.find(y)

    # 返回 x 所在集合的大小
    def get_size(self,x):
        return self.size[self.find(x)] # 集合大小 保存在根节点下

# 举例：
# 蓝桥oj 1135  蓝桥幼儿园
n,m=map(int,input().split())
uf = UnionFind(n)
for i in range(m):
    x,y,z=map(int,input().split())
    if x==1:
        uf.merge(y,z)
    else:
        if uf.is_same(y,z):
            print("YES")
        else:
            print("NO")
